Asynchronous (Async) ক্লায়েন্ট এবং সার্ভার ওয়েব সার্ভিসের পারফরম্যান্স উন্নত করার একটি অত্যন্ত কার্যকরী পদ্ধতি। এটি সার্ভিস কলের জন্য অপেক্ষা করার সময় ব্যবহারকারীর অ্যাপ্লিকেশনকে ব্লক না করে, বরং পেছনে প্রসেসিং চালিয়ে যাওয়ার সুযোগ প্রদান করে। Apache CXF এই ধরনের অ্যাসিঙ্ক্রোনাস কমিউনিকেশন সমর্থন করে, যা ওয়েব সার্ভিসের রেসপন্স টাইম কমাতে সহায়ক।
এই টিউটোরিয়ালে, আমরা দেখব কিভাবে Apache CXF ব্যবহার করে Async Client এবং Async Server তৈরি করা যায়।
Asynchronous Web Service server তৈরি করার জন্য, আমরা @WebService অ্যানোটেশন ব্যবহার করব এবং AsyncHandler
ইন্টারফেস প্রয়োগ করব। এর মাধ্যমে সার্ভিস কলগুলো অবিলম্বে প্রসেস হতে শুরু করবে এবং ক্লায়েন্টকে ব্লক করা হবে না।
এখানে একটি ওয়েব সার্ভিস এর উদাহরণ দেওয়া হল, যেখানে @WebService
অ্যানোটেশন ব্যবহার করা হয়েছে এবং AsyncHandler
ইন্টারফেস প্রয়োগ করা হয়েছে:
import javax.jws.WebService;
import org.apache.cxf.async.AsyncHandler;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
@WebService
public class HelloWorldAsyncImpl {
public String sayHello(String name) {
// সাধারণ ওয়েব সার্ভিস মেথড
return "Hello, " + name;
}
public void asyncHello(String name, AsyncHandler<String> asyncHandler) {
// অ্যাসিঙ্ক্রোনাস মেথড
String response = "Hello, " + name;
asyncHandler.handleResponse(new AsyncResponse<>(response)); // Response কে অ্যাসিঙ্ক্রোনাসভাবে প্রেরণ করা হচ্ছে
}
}
Apache CXF এ সার্ভার কনফিগার করার জন্য JaxWsServerFactoryBean
ব্যবহার করা হয়। অ্যাসিঙ্ক্রোনাস সার্ভিস সেটআপের জন্য নিচের মতো কনফিগারেশন করা যেতে পারে:
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
public class HelloWorldServer {
public static void main(String[] args) {
HelloWorldAsyncImpl implementor = new HelloWorldAsyncImpl();
JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();
factory.setServiceClass(HelloWorldAsyncImpl.class);
factory.setAddress("http://localhost:8080/hello");
factory.create();
}
}
এখানে, JaxWsServerFactoryBean
ব্যবহার করে ওয়েব সার্ভিসের জন্য অ্যাসিঙ্ক্রোনাস কল সক্ষম করা হয়েছে এবং setAddress
এর মাধ্যমে ওয়েব সার্ভিসের URL কনফিগার করা হয়েছে।
অ্যাসিঙ্ক্রোনাস ক্লায়েন্টের জন্য, আমরা Client
ইন্টারফেসের মাধ্যমে ওয়েব সার্ভিসের সাথে যোগাযোগ করব, তবে ওয়েব সার্ভিস কল হবে অ্যাসিঙ্ক্রোনাস। Apache CXF অ্যাসিঙ্ক্রোনাস ক্লায়েন্টের জন্য AsyncResponseCallback
ইন্টারফেস ব্যবহার করে, যা কলের পর রেসপন্স পাওয়ার পর কার্যকলাপ সম্পন্ন করে।
এখানে একটি অ্যাসিঙ্ক্রোনাস ক্লায়েন্টের উদাহরণ দেওয়া হলো:
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.async.AsyncResponseCallback;
import org.apache.cxf.message.Message;
public class HelloWorldAsyncClient {
public static void main(String[] args) {
// ক্লায়েন্ট তৈরি করা
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(HelloWorldAsyncImpl.class);
factory.setAddress("http://localhost:8080/hello");
HelloWorldAsyncImpl helloWorld = (HelloWorldAsyncImpl) factory.create();
// অ্যাসিঙ্ক্রোনাস কলের জন্য কলব্যাক পদ্ধতি সেট করা
helloWorld.asyncHello("John", new AsyncResponseCallback() {
@Override
public void handleResponse(Message message) {
String response = (String) message.getContent(String.class);
System.out.println("Async Response: " + response); // অ্যাসিঙ্ক্রোনাস রেসপন্স প্রদর্শন করা
}
@Override
public void handleFault(Message message) {
System.out.println("Async Fault: " + message);
}
});
}
}
এখানে AsyncResponseCallback
ব্যবহার করে ক্লায়েন্টে অ্যাসিঙ্ক্রোনাস রেসপন্স হ্যান্ডলিং করা হয়েছে। ওয়েব সার্ভিসের রেসপন্স পাওয়ার পর handleResponse
মেথড কল হবে, যেখানে আমরা রেসপন্স প্রিন্ট করতে পারব। যদি কোনো ত্রুটি ঘটে, তবে handleFault
মেথড কল হবে।
Apache CXF এ অ্যাসিঙ্ক্রোনাস ক্লায়েন্ট কনফিগার করতে নিম্নলিখিত কনফিগারেশন করা যেতে পারে:
<bean id="asyncHelloWorldClient" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
<property name="serviceClass" value="com.example.HelloWorldAsyncImpl"/>
<property name="address" value="http://localhost:8080/hello"/>
</bean>
এই কনফিগারেশন JaxWsProxyFactoryBean
দিয়ে তৈরি করে ক্লায়েন্ট সার্ভিসের সাথে অ্যাসিঙ্ক্রোনাসভাবে যোগাযোগ করবে। এখানে, সার্ভিস ক্লাসের এবং ওয়েব সার্ভিসের URL নির্দিষ্ট করা হয়েছে।
Apache CXF এর মাধ্যমে অ্যাসিঙ্ক্রোনাস ক্লায়েন্ট এবং সার্ভার তৈরি করার প্রক্রিয়া তুলনামূলকভাবে সহজ। এটি ওয়েব সার্ভিসের পারফরম্যান্স এবং স্কেলেবিলিটি উন্নত করতে সহায়তা করে, বিশেষ করে যখন ওয়েব সার্ভিসটি অনেকগুলো রিকোয়েস্ট একসাথে প্রক্রিয়া করতে সক্ষম হয়।
Read more